<?php

namespace App\Admin;

use Illuminate\Database\Eloquent\Model;

class Leave extends Model
{
    //
    public $table = 'leave';
    public $primarikey = 'id';
    protected $fillable = [
        'id', 'member_id','comment','pid'
    ];

    public function member()
    {
        return $this -> hasOne('App\Admin\Member', 'id', 'member_id');
    }

     public function child()
     {
        return $this -> hasMany('App\Admin\Leave', 'pid', 'id');
     }


    public function allChild()
    {
        // $this 指的是相关id的对应数据的实列
        // 两次预加载实际是调用了递归的方法
        // 可是数据是个递归的数组 不知如何展示 放弃
        return $this -> child() -> with('allChild');
    }

    // 这个方法不可以放弃

    // public function fence($data)
    // {
    //     static $leave = [];
    //     //static $arr = [];
    //     static $i =0 ;
        
    //     // $data = Leave::where('id', $id)->with('allChild') -> first();
    //     $leave[$i] = $data;//第一层
    //     while (!!$data['all_child']) {
    //         $leave[++$i] = $data['all_child'];//第二层
    //         // 放弃这个
    //     }
    // }
    /**
     * 递归函数取得我们的数据
     *
     * @param  [type]  $datas 是一个集合
     * @param  integer $level 自定义的层级元素
     * @param  integer $pid   父级id
     * @return void   $leave  返回添加了层级元素的集合$leave
     */
    public function fen($datas, $level = 0, $pid = 0)
    {
        // 定义一个初始化数组
        static $leave = array();

        foreach ($datas as $key => $value) {
            if ($value->pid == $pid) {
                $value->level = $level;//添加一个菜单层级元素
                $leave[] = $value; // 将添加了菜单层级的元素放入新的数组
                $this -> fen($datas, $level +1, $value->id);
            } 
        }
        // 重新排序了集合的顺序 找到了每一个0顶级元素下面的所有的子类 然后返回 
        return $leave;
    }
}
